package juego.RankingHistorico;

import java.io.File;


import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

public class PersistenciaRankingHistorico {
	
	private RankingGuardado ranking;
	
	private static String _crearRuta(){
		return System.getProperty("user.home") + "/Persistencia";
	}
	
	private static void _testDirectorio() {
		File oDir = new File(_crearRuta());
		if (!oDir.exists())
			oDir.mkdir();
	}
	
	public static boolean hayRanking() {
		_testDirectorio();
		File oFile = new File(crearRuta());
		return oFile.exists();
	}
	
	public static String crearRuta(){
		String ruta = _crearRuta() + "/PersistenciaRanking.xml";
		return ruta;
	}
	
	public void abrirArchivo (){
		
		ranking = new RankingGuardado() ;
		
		File XMLfile = new File(crearRuta());
		if (XMLfile.exists()){
			try {
				JAXBContext jaxbGuardado = JAXBContext.newInstance(RankingGuardado.class);
				Unmarshaller jaxbUnmarshaller = jaxbGuardado.createUnmarshaller();
				ranking = (RankingGuardado) jaxbUnmarshaller.unmarshal(XMLfile);
			} catch (JAXBException e) {
				   e.printStackTrace();
			}
		}
	}
	
	public int buscarJugador (String jugador){
		abrirArchivo();
		int i = 0;
		while (i<ranking.getRanking().size()){
			if (ranking.getRanking().get(i).getJugador().equals(jugador)){
				return i;
			}
			i++;
		}
		return -1;
	}
	
	public List<Guardado> getRankingHiustorico(){
		
		return ranking.getRanking();
	}
	
	public List<String> getJugadores(){
		ArrayList<String> nombres = new ArrayList<String>();
		for (int i=0;i<ranking.getRanking().size();i++)
			nombres.add(ranking.getRanking().get(i).getJugador());
		return nombres;
	}
	
	public void guardarJugador (String nombreJugador, int movimientos, int puntaje) {
		Guardado unJugador = new Guardado();
		unJugador.setJugador(nombreJugador);
		unJugador.setMovimiento(movimientos);
		unJugador.setPuntaje(puntaje);
		
		abrirArchivo();
		int busqueda = buscarJugador(nombreJugador);
		if (busqueda < 0){
			ranking.getRanking().add(unJugador);
		}
		else{
			Guardado guardadoAuxiliar = ranking.getRanking().get(busqueda);
			if (guardadoAuxiliar.getPuntaje() < unJugador.getPuntaje()) {
				guardadoAuxiliar.setMovimiento(unJugador.getMovimiento()+movimientos);
				guardadoAuxiliar.setPuntaje(unJugador.getPuntaje()+puntaje);
			}
		}
		Collections.sort(ranking.getRanking());

			
		try {
			JAXBContext jaxbGuardado = JAXBContext.newInstance(RankingGuardado.class);
			Marshaller jaxbMarshaller = jaxbGuardado.createMarshaller();
			File XMLGuardado = new File(crearRuta());
			jaxbMarshaller.marshal(ranking, XMLGuardado);
		} 
		catch (JAXBException e) {
		   e.printStackTrace();
		}
	}
}
